﻿#include <iostream>     // 引入输入输出流库，用于打印结果
#include <thread>       // 引入线程库，用于创建和管理多线程
#include <mutex>        // 引入互斥锁库，用于线程同步
int counter = 0;        // 全局计数器变量，所有线程共享
std::mutex mtx;         // 定义一个互斥锁，用于保护对 counter 的访问
// 定义一个函数 add，每次调用会对 counter 加 1，重复 10000 次
void add() {
    for (int i = 0; i < 10000; ++i) {
        // 使用 lock_guard 自动加锁和解锁，保护临界区
        std::lock_guard<std::mutex> lock(mtx);
        ++counter;  // 对共享变量 counter 执行加 1 操作
    }
}
int main() {
    // 创建两个线程 t1 和 t2，分别执行 add 函数
    std::thread t1(add);
    std::thread t2(add);
    // 等待两个线程执行完毕（阻塞当前主线程）
    t1.join();
    t2.join();
    // 输出最终的 counter 值，应为 20000（两个线程各加 10000 次）
    std::cout << "Final counter value: " << counter << std::endl;
    return 0;  // 程序正常结束
}